﻿using System.Collections.Generic;
using System.Data;
using Amoo.Code.Common;

namespace Amoo.Code.Data
{
    public class Usuario:BaseData
    {

        public List<int> GetUsuariosFeatures(Entity.Usuario pUsuario)
        {
            string query = @"select
                            (select count('') 
                               from comunidade c, usuario_comunidade uc 
                              where uc.idcomunidade = c.idcomunidade and uc.idusuario = " + pUsuario.idUsuario + @") as comunidades,  
                            (select count('') 
                               from comunidade c, noticia n, usuario_comunidade uc 
                              where n.idcomunidade = c.idcomunidade and c.idcomunidade = uc.idcomunidade and uc.idusuario = " + pUsuario.idUsuario + @") as noticias,  
                            (select count('') 
                               from comunidade c, banner b, usuario_comunidade uc 
                              where b.idcomunidade = c.idcomunidade and c.idcomunidade = uc.idcomunidade and uc.idusuario = " + pUsuario.idUsuario + @") as banners";

            IDataReader dr = ExecuteReader(query);
            List<int> returnValue = new List<int>();

            if (dr != null)
            {
                if (dr.Read())
                {
                    returnValue.Add(dr.GetInt32(0));
                    returnValue.Add(dr.GetInt32(1));
                    returnValue.Add(dr.GetInt32(2));

                    return returnValue;
                }
                else
                    return null;
            }
            else
                return null;
        
        }
        
        public bool IsExists(string email)
        {
            IDataReader dr = ExecuteReader(string.Format("SELECT idUsuario FROM usuario where dsNome='{0}'", email));
            if (dr != null)
            {
                if (dr.Read())
                {
                    return true;
                }
                else
                    return false;
            }
            else
                return false;
        }

        public Entity.Usuario Get(int pIdUsuario)
        {
            IDataReader dr = ExecuteReader(string.Format("SELECT idUsuario, dsNome , dsEmail, dsEmailAmoo, dsSenha , bolPrimeiroAcesso, dtPrimeiroAcesso , dtUltimoAcesso , bolUsuarioAtivo, dsLogradouro, dsEstado , dsCidade , dsPais , dsBairro, dsCep , bolUsuarioAdministrador, Identidade, CPFCNPJ   FROM usuario where idUsuario='{0}'", pIdUsuario));
            if (dr != null)
            {
                if (dr.Read())
                {
                    return Entity.Usuario.Load(dr);
                }
                else
                    return null;
            }
            else
                return null;
        }

        public Entity.Usuario Get(string pNome)
        {
            IDataReader dr = ExecuteReader(string.Format("SELECT idUsuario, dsNome , dsEmail, dsEmailAmoo, dsSenha , bolPrimeiroAcesso, dtPrimeiroAcesso , dtUltimoAcesso , bolUsuarioAtivo, dsLogradouro, dsEstado , dsCidade , dsPais , dsBairro, dsCep , bolUsuarioAdministrador, Identidade, CPFCNPJ   FROM usuario where dsNome='{0}'", pNome));
            if (dr != null)
            {
                if (dr.Read())
                {
                    return Entity.Usuario.Load(dr);
                }
                else
                    return null;
            }
            else
                return null;
        }

        public void Insert(Entity.Usuario usuario)
        {
            string query = @"INSERT INTO usuario (dsNome, dsEmail, dsEmailAmoo, dsSenha, bolPrimeiroAcesso, dtPrimeiroAcesso, dtUltimoAcesso, bolUsuarioAtivo, dsLogradouro, dsEstado, dsCidade, dsPais, dsBairro, dsCep, idTipo, bolUsuarioAdministrador, Identidade, CPFCNPJ)
                   VALUES ('{0}', '{1}', '{2}', '{3}', 1, sysdate(), sysdate(), 1 , '{4}', '{5}', '{6}', '{7}' , '{8}', '{9}', 0, 0, '{10}', '{11}')";
            query = string.Format(query, usuario.dsNome, usuario.dsEmail, usuario.dsEmailAmoo, usuario.dsSenha, usuario.dsLogradouro, usuario.dsEstado, usuario.dsCidade, usuario.dsPais, usuario.dsBairro, usuario.dsCep, usuario.Identidade, usuario.CPFCNPJ);
            Execute(query);
        }

        public List<Entity.Usuario> GetAll()
        {
            List<Entity.Usuario> olist = new List<Entity.Usuario>();

            IDataReader dr = ExecuteReader("SELECT idUsuario, dsNome , dsEmail, dsEmailAmoo, dsSenha , bolPrimeiroAcesso, dtPrimeiroAcesso , dtUltimoAcesso , bolUsuarioAtivo, dsLogradouro, dsEstado , dsCidade , dsPais , dsBairro, dsCep , bolUsuarioAdministrador, Identidade, CPFCNPJ  FROM usuario");
            if (dr != null)
            {
                while (dr.Read())
                {
                    olist.Add(Entity.Usuario.Load(dr));
                }
            }

            return olist;
        }
        
        internal Entity.Usuario Login(Entity.Usuario pUsuario)
        {

            IDataReader dr = ExecuteReader(string.Format("SELECT idUsuario, dsNome , dsEmail, dsEmailAmoo, dsSenha , bolPrimeiroAcesso, dtPrimeiroAcesso , dtUltimoAcesso , bolUsuarioAtivo, dsLogradouro, dsEstado , dsCidade , dsPais , dsBairro, dsCep , bolUsuarioAdministrador, Identidade, CPFCNPJ  FROM usuario where dsEmailAmoo='{0}' and dsSenha='{1}'", pUsuario.dsEmailAmoo, pUsuario.dsSenha));
            if (dr != null)
            {
                if (dr.Read())
                {
                    return Entity.Usuario.Load(dr);
                }
                else
                    return null;
            }
            else
                return null;
        }

        internal Amoo.Code.Entity.Usuario GetByComunidade(int pidComunidade)
        {
            IDataReader dr = ExecuteReader(string.Format("SELECT idUsuario FROM usuario_comunidade where idComunidade='{0}'", pidComunidade));
            if (dr != null)
            {
                if (dr.Read())
                {
                    dr = ExecuteReader(string.Format("SELECT idUsuario, dsNome , dsEmail, dsEmailAmoo, dsSenha , bolPrimeiroAcesso, dtPrimeiroAcesso , dtUltimoAcesso , bolUsuarioAtivo, dsLogradouro, dsEstado , dsCidade , dsPais , dsBairro, dsCep , bolUsuarioAdministrador, Identidade, CPFCNPJ   FROM usuario where idUsuario='{0}'", dr.GetInt32(0)));

                    if (dr != null)
                    {
                        if (dr.Read())
                        {
                            return Entity.Usuario.Load(dr);
                        }
                        return null;
                    }
                    return null;
                }
                else
                    return null;
            }
            else
                return null;
        }
    }
}
